package top.lshaci.learning.pdfqr;

import org.apache.pdfbox.pdmodel.common.PDRectangle;

/**
 * QrLocation
 *
 * @author lshaci
 * @version 1.0.3
 * @since 1.0.3
 */
public enum QrLocation {
    /**
     * 上左
     */
    TOP_LEFT,
    /**
     * 上右
     */
    TOP_RIGHT,
    /**
     * 下左
     */
    BOTTOM_LEFT,
    /**
     * 下右
     */
    BOTTOM_RIGHT,
    /**
     * 中间
     */
    CENTER;

    /**
     * 根据PDF页面的媒体框和二维码尺寸解析二维码的定位坐标
     * 该方法旨在确定在PDF页面上放置二维码的位置，基于当前实例所代表的位置策略
     *
     * @param rectangle PDF页面的媒体框，用于获取页面的宽度和高度
     * @param qrSize    二维码的尺寸，用于计算二维码在页面上的确切位置
     * @return 返回一个包含二维码x和y坐标的整数数组
     */
    public int[] parseLocation(PDRectangle rectangle, int qrSize) {
        // 初始化二维码的x和y坐标
        int x = 0;
        int y = 0;

        // 根据当前实例的类型（即二维码的位置策略），计算二维码的坐标
        switch (this) {
            case TOP_LEFT:
                // 对于左上角策略，二维码的y坐标是页面高度减去二维码尺寸
                y = (int) rectangle.getHeight() - qrSize;
                break;
            case TOP_RIGHT:
                // 对于右上角策略，二维码的x和y坐标分别是页面宽度减去二维码尺寸和页面高度减去二维码尺寸
                x = (int) rectangle.getWidth() - qrSize;
                y = (int) rectangle.getHeight() - qrSize;
                break;
            case BOTTOM_RIGHT:
                // 对于右下角策略，二维码的x坐标是页面宽度减去二维码尺寸
                x = (int) rectangle.getWidth() - qrSize;
                break;
            case CENTER:
                // 对于中心策略，二维码的x和y坐标分别是页面宽度和高度的一半减去二维码尺寸的一半
                x = (int) rectangle.getWidth() / 2 - qrSize / 2;
                y = (int) rectangle.getHeight() / 2 - qrSize / 2;
                break;
        }

        // 返回计算得到的二维码坐标
        return new int[]{x, y};
    }
}
